package tp1_Ex3;

import java.util.ArrayList;

/**
 * <b>Bibliotheue est la class representant une bibliotheque pouvant contenir des documents et des livres</b>
 * <p>
 * La bibliotheque est caracterisee par les informations suivantes :
 * <ul>
 * <li>Un nombre maximum de documents/livre : max_doc.</li>
 * <li>Une liste de Documents : Doc</li>
 * <li>Une liste de Livre : Livre</li>
 * <li>Une liste de Livre par auteur: rechAuteur</li>
 * </ul>
 * </p>
 * 
 * @author Audricq Taffin
 * @version 1.0
 */
public class Bibliotheque 
{
	/*
	 * Les variables de classe
	 */
	private int max_doc;
	private ArrayList<Document> Doc;
	private ArrayList<Livre> Livre;
	
	 /*
     * Constructeur Bibliotheque.
     * 
     * Prend en argument le nombre maximum de documents/livres.
     */
	public Bibliotheque (int max_livres)
	{
		this.max_doc = max_livres;
		this.Doc = new ArrayList<Document>();
		this.Livre = new ArrayList<Livre>();
	}
	
	 /*
     * Getteur sur la variable max_doc.
     */
	public int getCapacite ()
	{
		return max_doc;
	}
	
	 /*
     * Methode d'ajout de documents
     * 
     * Prend en argument le document a ajoute. Une verification est faite pour savoir si la bibliotheque est pleine. Une exception
     * sera renvoyee si la bibliotheque est pleine.
     */
	public boolean ajoutDocument (Document d) throws BibliothequeException
	{
		if (Doc.size() >= max_doc )
		{
			throw new BibliothequeException(d,0);
		}
		
		Doc.add(d);
		return true;
	}
	
	 /**
     * Methode d'ajout de livres
     * 
     * Prend en argument le livre a ajoute. Une verification est faite pour savoir si la bibliotheque est pleine. Une exception
     * sera renvoyee si la bibliotheque est pleine.
     */
	public boolean ajoutLivre (Livre l) throws BibliothequeException
	{
		if (Livre.size() >= max_doc )
		{
			throw new BibliothequeException(l,0);
		}
		
		Livre.add(l);
		return true;
	}
	
	/*
	 * Methode toString de la Bibliotheque.
	 */
	public String toString()
	{
		String resultat = new String();
		System.out.println("Liste des documents presents :");
		for (int i = 0; i < Doc.size(); i++)
		{
			resultat = resultat.concat(Doc.get(i).toString() + "\n");
			
		}	
		System.out.println("Liste des livres :");
		for (int i = 0; i < Livre.size(); i++)
		{
			resultat = resultat.concat(Livre.get(i).toString() + "\n");
			
		}		
		return resultat;
	}
	
	/*
	 * Methode permettant a partir d'un nom d'auteur passe en argument, de retrouve tout les livres avec cet auteur et de les
	 * enregistre dans une liste.
	 */
	public ArrayList<Livre> rechercheAuteur (String auteur)
	{
		ArrayList<Livre> rechAuteur;
		rechAuteur = new ArrayList<Livre>();
		for (int i = 0; i < Livre.size(); i++)
		{
			if(auteur.equals(Livre.get(i).getAuteur()))
			{
				rechAuteur.add(Livre.get(i));
			}
		}
		return rechAuteur;
	}
	
}
